package com.lesama.string;

public class StringDemo3 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2); // true  String通过""赋值是创建在StringTable字符串常量池中的

        String s3 = "abc";
        String s4 = new String("abc");
        // 不过这里s4中存储的其实是"abc"在StringTable中的地址，其实是堆内存中对于字符串常量池的拷贝副本
        System.out.println(s3 == s4); // false String 通过new创建是在堆内存中开辟空间

        String s5 = "abc";
        String s6 = "ab";
        String s7 = s6 + "c";
        // 再通过StringBuilder对象的同String方法将操作后的字符串转换为String类型，存放在堆中
        System.out.println(s7 == s5); // false, 字符串的+操作符其实是通过StringBuilder进行操作

        String s8 = "abc";
        String s9 = "a" + "b" + "c"; // 编译成字节码文件这里相当于String s9 = "abc"
        // 这里是Java 的常量优化机制，编译中会直接拼接常量
        System.out.println(s8 == s9); // true
    }
}
